﻿/*
 * Created by SharpDevelop.
 * User: CrOnO
 * Date: 18/10/2011
 * Time: 09:13 a.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using Business_Entity;

namespace DAOFactory
{
	/// <summary>
	/// Description of DAOEmpleado.
	/// </summary>
	public class DAOEmpleado
	{
		public DAOEmpleado()
		{
		}
		
		public int registrarEmpleado(String nombre, String apPaterno, String apMaterno, String tipoDocId,
    	                  					 String docIdentidad, String fecNacimiento, String sexo, 
    	                  					 String direccion, String telCasa, String telCelular, 
    	                  					 String telEmergencia, String contactoEmergencia,
    	                  					 String area, String cargo)
		{
			int estadoTran = 0;
			String user = null;
			String pwd = null;

			try 
			{
				SqlCommand cmd = new SqlCommand("RRHH_REGISTRAR_EMPLEADO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = nombre;
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = apPaterno;
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = apMaterno;
				cmd.Parameters.Add("@TIPODOCIDENTIDAD", SqlDbType.VarChar, 50);
				cmd.Parameters["@TIPODOCIDENTIDAD"].Value = tipoDocId;
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = docIdentidad;
				cmd.Parameters.Add("@FECNACIMIENTO", SqlDbType.DateTime);
				cmd.Parameters["@FECNACIMIENTO"].Value = fecNacimiento;
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);
				cmd.Parameters["@SEXO"].Value = sexo;
				cmd.Parameters.Add("@DIRECCION", SqlDbType.VarChar, 200);
				cmd.Parameters["@DIRECCION"].Value = direccion;
				cmd.Parameters.Add("@TELCASA", SqlDbType.VarChar, 20);
				cmd.Parameters["@TELCASA"].Value = telCasa;
				cmd.Parameters.Add("@TELCELULAR", SqlDbType.VarChar, 20);
				cmd.Parameters["@TELCELULAR"].Value = telCelular;
				cmd.Parameters.Add("@TELEMERGENCIA", SqlDbType.VarChar, 20);
				cmd.Parameters["@TELEMERGENCIA"].Value = telEmergencia;
				cmd.Parameters.Add("@CONTACTOEMERGENCIA", SqlDbType.VarChar, 200);
				cmd.Parameters["@CONTACTOEMERGENCIA"].Value = contactoEmergencia;
				cmd.Parameters.Add("@AREA", SqlDbType.VarChar, 100);
				cmd.Parameters["@AREA"].Value = area;
				cmd.Parameters.Add("@CARGO", SqlDbType.VarChar, 100);
				cmd.Parameters["@CARGO"].Value = cargo;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				
				
				//ConnectionManager.closeConnection();
			}
			catch 
			{
//				System.Windows.Forms.MessageBox.Show("Error al registrar nuevo empleado","Error");
			}
			
			return estadoTran;
		}
		
		public int modificarEmpleado(BEEmpleado empleado)
		{
			int estadoTran = 0;
			
			try
			{				
				SqlCommand cmd = new SqlCommand("RRHH_MODIFICAR_EMPLEADO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDEMPLEADO", SqlDbType.Int);
				cmd.Parameters["@IDEMPLEADO"].Value = empleado.IdEmpleado;
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = empleado.Nombre;
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = empleado.ApPaterno;
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = empleado.ApMaterno;
				cmd.Parameters.Add("@TIPODOCIDENTIDAD", SqlDbType.VarChar, 50);
                cmd.Parameters["@TIPODOCIDENTIDAD"].Value = empleado.TipoDocIdentidad;
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = empleado.DocIdentidad;
				cmd.Parameters.Add("@FECNACIMIENTO", SqlDbType.DateTime);
				cmd.Parameters["@FECNACIMIENTO"].Value = empleado.FecNacimiento;
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);
				cmd.Parameters["@SEXO"].Value = empleado.Sexo;
				cmd.Parameters.Add("@DIRECCION", SqlDbType.VarChar, 200);
				cmd.Parameters["@DIRECCION"].Value = empleado.Direccion;
				cmd.Parameters.Add("@TELCASA", SqlDbType.VarChar, 20);
				cmd.Parameters["@TELCASA"].Value = empleado.TelCasa;
				cmd.Parameters.Add("@TELCELULAR", SqlDbType.VarChar, 20);
				cmd.Parameters["@TELCELULAR"].Value = empleado.TelCelular;
				cmd.Parameters.Add("@TELEMERGENCIA", SqlDbType.VarChar, 20);
				cmd.Parameters["@TELEMERGENCIA"].Value = empleado.TelEmergencia;
				cmd.Parameters.Add("@CONTACTOEMERGENCIA", SqlDbType.VarChar, 200);
				cmd.Parameters["@CONTACTOEMERGENCIA"].Value = empleado.ContactoEmergencia;
				cmd.Parameters.Add("@AREA", SqlDbType.VarChar, 100);
				cmd.Parameters["@AREA"].Value = empleado.Area;
				cmd.Parameters.Add("@CARGO", SqlDbType.VarChar, 100);
				cmd.Parameters["@CARGO"].Value = empleado.Cargo;
				cmd.Parameters.Add("@ESTADO", SqlDbType.VarChar, 50);
				cmd.Parameters["@ESTADO"].Value = empleado.Estado;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
					
				cmd.ExecuteNonQuery();
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;
				//ConnectionManager.closeConnection();
			}
			catch (Exception e)
			{
//				System.Windows.Forms.MessageBox.Show("Error al modificar datos","Error");
			}
			
			return estadoTran;
		}
		 
		public int eliminarEmpleado(BEEmpleado empleado)
		{
			int estadoTran = 0;
			
			try 
			{
				SqlCommand cmd = new SqlCommand("RRHH_ELIMINAR_EMPLEADO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDEMPLEADO", SqlDbType.Int);
				cmd.Parameters["@IDEMPLEADO"].Value = empleado.IdEmpleado;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				//ConnectionManager.closeConnection();
			}
			catch
			{
//				System.Windows.Forms.MessageBox.Show("Error al eliminar empleado","Error");
			}
			
			return estadoTran;
		}
		
		public List<BEEmpleado> buscarEmpleado(String nombre, String apPaterno, String apMaterno,
		                                String area, String cargo, String docIdentidad, String sexo)
		{
			try
			{
				SqlCommand cmd = new SqlCommand("RRHH_BUSCAR_EMPLEADO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = nombre;
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = apPaterno;
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = apMaterno;
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);
				cmd.Parameters["@SEXO"].Value = sexo;
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = docIdentidad;
				cmd.Parameters.Add("@AREA", SqlDbType.VarChar, 100);
				cmd.Parameters["@AREA"].Value = area;
				cmd.Parameters.Add("@CARGO", SqlDbType.VarChar, 100);
				cmd.Parameters["@CARGO"].Value = cargo;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;

				object estadoTran;
				
				SqlDataReader amd = cmd.ExecuteReader();
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;
						
				List<BEEmpleado> lista = new List<BEEmpleado>();
					
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							BEEmpleado empleado = new BEEmpleado(int.Parse(amd[0].ToString()), 
								                                    amd[1].ToString(), amd[2].ToString(), 
								                                    amd[3].ToString(),
								                                    int.Parse(amd[4].ToString()), 
								                                    amd[5].ToString(),
								                                    DateTime.Parse(amd[6].ToString()), 
								                                    amd[7].ToString(), amd[8].ToString(), 
								                                    amd[9].ToString(), amd[10].ToString(), 
								                                    amd[11].ToString(), amd[12].ToString(), 
								                                    int.Parse(amd[13].ToString()),
								                                    int.Parse(amd[14].ToString()), 
								                                    0, //cambiar cuando SI se tenga usuario
								                                    int.Parse(amd[16].ToString()),
								                                    int.Parse(amd[17].ToString()));
							lista.Add(empleado);
						}
						catch (Exception e)
						{
//							System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)"+e,"Error");
							amd.Close();
							return null;						
						}
					}
					
					amd.Close();
					foreach(BEEmpleado empleado in lista)
						llenarDescripciones(empleado);
					return lista;
				}
				else
				{
					amd.Close();
					return null;
				}
			}
			catch
			{
//				System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)","Error");
				return null;	
			}
		}
		
		public List<BEEmpleado> buscarAdministrador(String nombre, String apPaterno, String apMaterno,
		                                String area, String cargo, String docIdentidad, String sexo)
		{
			try
			{
				SqlCommand cmd = new SqlCommand("RRHH_BUSCAR_ADMINISTRADOR_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = nombre;
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = apPaterno;
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = apMaterno;
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);
				cmd.Parameters["@SEXO"].Value = sexo;
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = docIdentidad;
				cmd.Parameters.Add("@AREA", SqlDbType.VarChar, 100);
				cmd.Parameters["@AREA"].Value = area;
				cmd.Parameters.Add("@CARGO", SqlDbType.VarChar, 100);
				cmd.Parameters["@CARGO"].Value = cargo;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;

				object estadoTran;
				
				SqlDataReader amd = cmd.ExecuteReader();
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;
						
				List<BEEmpleado> lista = new List<BEEmpleado>();
					
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							BEEmpleado empleado = new BEEmpleado(int.Parse(amd[0].ToString()), 
								                                    amd[1].ToString(), amd[2].ToString(), 
								                                    amd[3].ToString(),
								                                    int.Parse(amd[4].ToString()), 
								                                    amd[5].ToString(),
								                                    DateTime.Parse(amd[6].ToString()), 
								                                    amd[7].ToString(), amd[8].ToString(), 
								                                    amd[9].ToString(), amd[10].ToString(), 
								                                    amd[11].ToString(), amd[12].ToString(), 
								                                    int.Parse(amd[13].ToString()),
								                                    int.Parse(amd[14].ToString()), 
								                                    0, //cambiar cuando SI se tenga usuario
								                                    int.Parse(amd[16].ToString()),
								                                    int.Parse(amd[17].ToString()));
							lista.Add(empleado);
						}
						catch (Exception e)
						{
//							System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)"+e,"Error");
							amd.Close();
							return null;						
						}
					}
					
					amd.Close();
					foreach(BEEmpleado empleado in lista)
						llenarDescripciones(empleado);
					return lista;
				}
				else
				{
					amd.Close();
					return null;
				}
			}
			catch
			{
//				System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)","Error");
				return null;	
			}
		}
		
		public List<BEEmpleado> buscarEmpleadoServicio(String nombre, String apPaterno, String apMaterno,
		                                			   DateTime hora, int idServicio, DateTime fecha)
		{
			try
			{
				SqlCommand cmd = new SqlCommand("RRHH_BUSCAR_EMPLEADO_SERVICIO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = nombre;
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = apPaterno;
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = apMaterno;
				cmd.Parameters.Add("@HORA", SqlDbType.DateTime);
				cmd.Parameters["@HORA"].Value = hora;
				cmd.Parameters.Add("@FECHA", SqlDbType.DateTime);
				cmd.Parameters["@FECHA"].Value = fecha;
				cmd.Parameters.Add("@IDSERVICIO", SqlDbType.Int);
				cmd.Parameters["@IDSERVICIO"].Value = idServicio;
				
				SqlDataReader amd = cmd.ExecuteReader();
				List<BEEmpleado> lista = new List<BEEmpleado>();
					
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							BEEmpleado empleado = new BEEmpleado(int.Parse(amd[0].ToString()), 
								                                    amd[1].ToString(), amd[2].ToString(), 
								                                    amd[3].ToString(),
								                                    int.Parse(amd[4].ToString()), 
								                                    amd[5].ToString(),
								                                    DateTime.Parse(amd[6].ToString()), 
								                                    amd[7].ToString(), amd[8].ToString(), 
								                                    amd[9].ToString(), amd[10].ToString(), 
								                                    amd[11].ToString(), amd[12].ToString(), 
								                                    int.Parse(amd[13].ToString()),
								                                    int.Parse(amd[14].ToString()), 
								                                    int.Parse(amd[15].ToString()),
								                                    int.Parse(amd[16].ToString()),
								                                    int.Parse(amd[17].ToString()));
							lista.Add(empleado);
						}
						catch (Exception e)
						{
//							System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)"+e,"Error");
							amd.Close();
							return null;						
						}
					}
					
					amd.Close();
					foreach(BEEmpleado empleado in lista)
						llenarDescripciones(empleado);
					return lista;
				}
				else
				{
					amd.Close();
					return null;
				}
			}
			catch
			{
//				System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)","Error");
				return null;	
			}
		}
		
		public List<BEEmpleado> buscarEmpleadoDadoServicio(BEServicio servicio)
		{
			try
			{
				SqlCommand cmd = new SqlCommand("SERVICIOS_OBTENER_EMPLEADOXSERVICIO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDSERVICIO", SqlDbType.Int);
				cmd.Parameters["@IDSERVICIO"].Value = servicio.Codigo;
				
				SqlDataReader amd = cmd.ExecuteReader();
				List<BEEmpleado> lista = new List<BEEmpleado>();
					
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
						try
						{
							BEEmpleado empleado = new BEEmpleado(int.Parse(amd[0].ToString()), 
								                                    amd[1].ToString(), amd[2].ToString(), 
								                                    amd[3].ToString(),
								                                    int.Parse(amd[4].ToString()), 
								                                    amd[5].ToString(),
								                                    DateTime.Parse(amd[6].ToString()), 
								                                    amd[7].ToString(), amd[8].ToString(), 
								                                    amd[9].ToString(), amd[10].ToString(), 
								                                    amd[11].ToString(), amd[12].ToString(), 
								                                    int.Parse(amd[13].ToString()),
								                                    int.Parse(amd[14].ToString()), 
								                                    int.Parse(amd[15].ToString()),
								                                    int.Parse(amd[16].ToString()),
								                                    int.Parse(amd[17].ToString()));
							lista.Add(empleado);
						}
						catch (Exception e)
						{
//							System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)"+e,"Error");
							amd.Close();
							return null;						
						}
					}
					
					amd.Close();
					foreach(BEEmpleado empleado in lista)
						llenarDescripciones(empleado);
					return lista;
				}
				else
				{
					amd.Close();
					return null;
				}
			}
			catch
			{
//				System.Windows.Forms.MessageBox.Show("Error al buscar empleado(s)","Error");
				return null;	
			}
		}
		
		public int llenarDescripciones(BEEmpleado empleado)
		{
			int estadoTran = 0;
			try
			{
				SqlCommand cmd = new SqlCommand("RRHH_LLENAR_DESCRIPCIONES_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDEMPLEADO", SqlDbType.Int);
				cmd.Parameters["@IDEMPLEADO"].Value = empleado.IdEmpleado;
				cmd.Parameters.Add("@TIPODOCID", SqlDbType.VarChar, 50);
				cmd.Parameters["@TIPODOCID"].Direction = ParameterDirection.Output;
				cmd.Parameters.Add("@AREA", SqlDbType.VarChar, 100);
				cmd.Parameters["@AREA"].Direction = ParameterDirection.Output;
				cmd.Parameters.Add("@CARGO", SqlDbType.VarChar, 100);
				cmd.Parameters["@CARGO"].Direction = ParameterDirection.Output;
				cmd.Parameters.Add("@ESTADO", SqlDbType.VarChar, 50);
				cmd.Parameters["@ESTADO"].Direction = ParameterDirection.Output;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;			
				
				cmd.ExecuteNonQuery();
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
							
				if (estadoTran == 1)
				{
					empleado.TipoDocIdentidad = cmd.Parameters["@TIPODOCID"].Value.ToString();
					empleado.Area = cmd.Parameters["@AREA"].Value.ToString();
					empleado.Cargo = cmd.Parameters["@CARGO"].Value.ToString();
					empleado.Estado = cmd.Parameters["@ESTADO"].Value.ToString();
				}
				else
				{
					empleado.DocIdentidad = "";
					empleado.Area = "";	
					empleado.Cargo = "";	
					empleado.Estado = "";				
				}
			}
			catch
			{
//				System.Windows.Forms.MessageBox.Show("Error al acceder a datos.","Error");				
			}
			
			return estadoTran;
		}
	}
}
